package com.ksyun.campus.metaserver.domain;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

/**
 * Inode元数据实体类
 * 表示文件系统中的文件或目录节点，包含唯一标识、类型、名称、父节点、时间戳、大小、权限、所有者等元数据信息
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Inode {
    /**
     * 文件或目录的唯一ID
     */
    private String fileId;
    /**
     * 节点类型（文件/目录）
     */
    private FileType type;
    /**
     * 文件或目录名称
     */
    private String name;
    /**
     * 父节点ID
     */
    private String parentId;
    /**
     * 创建时间，格式为yyyy-MM-dd HH:mm:ss
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime ctime;
    /**
     * 修改时间，格式为yyyy-MM-dd HH:mm:ss
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime mtime;
    /**
     * 文件大小（字节），目录为0
     */
    private long size;
    /**
     * 副本数，仅对文件有效
     */
    private int replication;
    /**
     * 文件校验和（如MD5），用于完整性校验
     */
    private String checksum;
    /**
     * 所有者用户名
     */
    private String owner;
    /**
     * 所属用户组
     */
    private String group;
    /**
     * 权限（如755）
     */
    private int permissions;
    /**
     * 判断是否为文件节点
     * @return true表示是文件，false表示不是
     */
    public boolean isFile() {
        return FileType.FILE.equals(type);
    }
    /**
     * 判断是否为目录节点
     * @return true表示是目录，false表示不是
     */
    public boolean isDirectory() {
        return FileType.DIR.equals(type);
    }
}
